home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / plaf / basic / BasicPopupMenuUI$MouseGrabber.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  4.8 KB  |  239 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Component;
  4. import java.awt.Container;
  5. import java.awt.Window;
  6. import java.awt.event.ComponentEvent;
  7. import java.awt.event.ComponentListener;
  8. import java.awt.event.MouseEvent;
  9. import java.awt.event.MouseListener;
  10. import java.awt.event.MouseMotionListener;
  11. import java.awt.event.WindowEvent;
  12. import java.awt.event.WindowListener;
  13. import java.util.EventObject;
  14. import java.util.Vector;
  15. import javax.swing.JMenuBar;
  16. import javax.swing.JPopupMenu;
  17. import javax.swing.MenuElement;
  18. import javax.swing.MenuSelectionManager;
  19. import javax.swing.event.ChangeEvent;
  20. import javax.swing.event.ChangeListener;
  21.  
  22. class BasicPopupMenuUI$MouseGrabber implements MouseListener, MouseMotionListener, WindowListener, ComponentListener, ChangeListener {
  23.    Vector grabbed = new Vector();
  24.    MenuElement lastGrabbed = null;
  25.    boolean lastGrabbedMenuBarChild = false;
  26.    MenuElement[] lastPathSelected = new MenuElement[0];
  27.  
  28.    public BasicPopupMenuUI$MouseGrabber() {
  29.       MenuSelectionManager var1 = MenuSelectionManager.defaultManager();
  30.       var1.addChangeListener(this);
  31.    }
  32.  
  33.    void cancelPopupMenu() {
  34.       MenuSelectionManager var1 = MenuSelectionManager.defaultManager();
  35.       MenuElement[] var2 = var1.getSelectedPath();
  36.       if (this.lastGrabbed == this.getFirstPopup()) {
  37.          MenuSelectionManager.defaultManager().clearSelectedPath();
  38.          this.ungrabContainers();
  39.       } else {
  40.          this.lastGrabbed = this.getFirstPopup();
  41.          if (var2[0] instanceof JMenuBar) {
  42.             this.lastGrabbedMenuBarChild = true;
  43.          } else {
  44.             this.lastGrabbedMenuBarChild = false;
  45.          }
  46.       }
  47.  
  48.    }
  49.  
  50.    public void componentHidden(ComponentEvent var1) {
  51.       this.cancelPopupMenu();
  52.    }
  53.  
  54.    public void componentMoved(ComponentEvent var1) {
  55.       this.cancelPopupMenu();
  56.    }
  57.  
  58.    public void componentResized(ComponentEvent var1) {
  59.       this.cancelPopupMenu();
  60.    }
  61.  
  62.    public void componentShown(ComponentEvent var1) {
  63.       this.cancelPopupMenu();
  64.    }
  65.  
  66.    private MenuElement getFirstPopup() {
  67.       MenuSelectionManager var1 = MenuSelectionManager.defaultManager();
  68.       MenuElement[] var2 = var1.getSelectedPath();
  69.       MenuElement var3 = null;
  70.  
  71.       for(int var4 = 0; var3 == null && var4 < var2.length; ++var4) {
  72.          if (var2[var4] instanceof JPopupMenu) {
  73.             var3 = var2[var4];
  74.          }
  75.       }
  76.  
  77.       return var3;
  78.    }
  79.  
  80.    void grabContainer(Container var1, Component var2) {
  81.       if (var1 != var2) {
  82.          MenuSelectionManager var3 = MenuSelectionManager.defaultManager();
  83.          MenuElement[] var4 = var3.getSelectedPath();
  84.          this.lastGrabbed = this.getFirstPopup();
  85.          if (var4[0] instanceof JMenuBar) {
  86.             this.lastGrabbedMenuBarChild = true;
  87.          } else {
  88.             this.lastGrabbedMenuBarChild = false;
  89.          }
  90.  
  91.          if (var1 instanceof Window) {
  92.             ((Window)var1).addWindowListener(this);
  93.             ((Window)var1).addComponentListener(this);
  94.             this.grabbed.addElement(var1);
  95.          }
  96.  
  97.          Object var5 = ((Component)var1).getTreeLock();
  98.          synchronized(var5){}
  99.  
  100.          try {
  101.             int var7 = var1.getComponentCount();
  102.             Component[] var8 = var1.getComponents();
  103.  
  104.             for(int var9 = 0; var9 < var7; ++var9) {
  105.                Component var10 = var8[var9];
  106.                if (var10.isVisible()) {
  107.                   var10.addMouseListener(this);
  108.                   var10.addMouseMotionListener(this);
  109.                   this.grabbed.addElement(var10);
  110.                   if (var10 instanceof Container) {
  111.                      Container var11 = (Container)var10;
  112.                      this.grabContainer(var11, var2);
  113.                   }
  114.                }
  115.             }
  116.          } catch (Throwable var13) {
  117.             throw var13;
  118.          }
  119.  
  120.       }
  121.    }
  122.  
  123.    public void mouseClicked(MouseEvent var1) {
  124.    }
  125.  
  126.    public void mouseDragged(MouseEvent var1) {
  127.       MenuSelectionManager.defaultManager().processMouseEvent(var1);
  128.    }
  129.  
  130.    public void mouseEntered(MouseEvent var1) {
  131.    }
  132.  
  133.    public void mouseExited(MouseEvent var1) {
  134.    }
  135.  
  136.    public void mouseMoved(MouseEvent var1) {
  137.    }
  138.  
  139.    public void mousePressed(MouseEvent var1) {
  140.       Component var2 = (Component)((EventObject)var1).getSource();
  141.       MenuSelectionManager var3 = MenuSelectionManager.defaultManager();
  142.       this.cancelPopupMenu();
  143.    }
  144.  
  145.    public void mouseReleased(MouseEvent var1) {
  146.       MenuSelectionManager.defaultManager().processMouseEvent(var1);
  147.    }
  148.  
  149.    private void requestAddGrab(Component var1) {
  150.       Window var2 = BasicPopupMenuUI.access$0(var1);
  151.       MenuSelectionManager var3 = MenuSelectionManager.defaultManager();
  152.       MenuElement[] var4 = var3.getSelectedPath();
  153.       Component var5 = null;
  154.  
  155.       for(int var6 = 0; var5 == null && var6 < var4.length; ++var6) {
  156.          if (var4[var6] instanceof JPopupMenu) {
  157.             var5 = var4[var6].getComponent();
  158.          }
  159.       }
  160.  
  161.       this.grabContainer(var2, var5);
  162.    }
  163.  
  164.    private void requestRemoveGrab() {
  165.       this.ungrabContainers();
  166.    }
  167.  
  168.    public void stateChanged(ChangeEvent var1) {
  169.       MenuSelectionManager var2 = MenuSelectionManager.defaultManager();
  170.       MenuElement[] var3 = var2.getSelectedPath();
  171.       if (this.lastPathSelected.length == 0 && var3.length != 0) {
  172.          Component var4 = var3[0].getComponent();
  173.          if (var4 instanceof JPopupMenu) {
  174.             var4 = ((JPopupMenu)var4).getInvoker();
  175.          }
  176.  
  177.          this.requestAddGrab(var4);
  178.       }
  179.  
  180.       if (this.lastPathSelected.length != 0 && var3.length == 0) {
  181.          this.requestRemoveGrab();
  182.       }
  183.  
  184.       if (var3 != null && var3.length > 2 && var3[0] instanceof JMenuBar && this.lastGrabbedMenuBarChild && this.lastGrabbed != this.getFirstPopup()) {
  185.          this.lastGrabbed = this.getFirstPopup();
  186.          if (var3[0] instanceof JMenuBar) {
  187.             this.lastGrabbedMenuBarChild = true;
  188.          } else {
  189.             this.lastGrabbedMenuBarChild = false;
  190.          }
  191.       }
  192.  
  193.       this.lastPathSelected = var3;
  194.    }
  195.  
  196.    void ungrabContainers() {
  197.       int var1 = 0;
  198.  
  199.       for(int var2 = this.grabbed.size(); var1 < var2; ++var1) {
  200.          Component var3 = (Component)this.grabbed.elementAt(var1);
  201.          if (var3 instanceof Window) {
  202.             ((Window)var3).removeWindowListener(this);
  203.             ((Window)var3).removeComponentListener(this);
  204.          } else {
  205.             var3.removeMouseListener(this);
  206.             var3.removeMouseMotionListener(this);
  207.          }
  208.       }
  209.  
  210.       this.grabbed = new Vector();
  211.       this.lastGrabbed = null;
  212.       this.lastGrabbedMenuBarChild = false;
  213.    }
  214.  
  215.    public void windowActivated(WindowEvent var1) {
  216.    }
  217.  
  218.    public void windowClosed(WindowEvent var1) {
  219.       this.cancelPopupMenu();
  220.    }
  221.  
  222.    public void windowClosing(WindowEvent var1) {
  223.       this.cancelPopupMenu();
  224.    }
  225.  
  226.    public void windowDeactivated(WindowEvent var1) {
  227.    }
  228.  
  229.    public void windowDeiconified(WindowEvent var1) {
  230.    }
  231.  
  232.    public void windowIconified(WindowEvent var1) {
  233.       this.cancelPopupMenu();
  234.    }
  235.  
  236.    public void windowOpened(WindowEvent var1) {
  237.    }
  238. }
  239.